package com.kangye.enterprise.frontdesk.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

/**
 * @program: bar
 * @description: Redis存取工具类
 * @author:
 * @create: 2021-05-07 16:42
 **/
@Component
public class RedisStorageUtil {
    @Autowired
    private RedisTemplate redisTemplate = new RedisTemplate(); //注入redis操作对象

    /**
     * 向redis中存储集合数据--有时间
     * @param key 唯一值
     * @param value 要存储的数据
     * @param timeout 存活时间
     * @param unit 以秒|时|天...为单位
     */
    public void addObjList(String key, Object value, long timeout, final TimeUnit unit){
        //存入到redis缓存中
        addObjList(key, value);
        //设置这个缓存数据的存活时间 timeout 存活时间  TimeUnit.MINUTES设置单位为分钟
        redisTemplate.expire(key,timeout, unit);
    }

    /**
     * 向redis中存储集合数据--无时间
     * @param key 唯一值
     * @param value 要存储的数据
     */
    public void addObjList(String key, Object value){
        //存入到redis缓存中
        redisTemplate.opsForList().rightPush(key,value);
        redisTemplate.opsForValue().set(key,value);
    }

    /**
     * 向redis中存储单个数据--有时间
     * @param key 唯一值
     * @param value 要存储的数据
     * @param timeout 存活时间
     * @param unit 以秒|时|天...为单位
     */
    public void addObjOne(String key, Object value, long timeout, final TimeUnit unit){
        //存入到redis缓存中
        addObjOne(key, value);
        //设置这个缓存数据的存活时间 timeout 存活时间  TimeUnit.MINUTES设置单位为分钟
        redisTemplate.expire(key,timeout, unit);
    }

    /**
     * 向redis中存储单个数据--无时间
     * @param key 唯一值
     * @param value 要存储的数据
     */
    public void addObjOne(String key, Object value){
        //存入到redis缓存中
        redisTemplate.opsForValue().set(key,value);
    }

    /**
     * 获取单个对象的值
     * @param key
     * @return
     */
    public Object getKeyOne(String key){
        return redisTemplate.opsForValue().get(key);
    }

    /**
     * 获取集合所有的值
     * @param key
     * @return
     */
    public Object getKeyList(String key){
        return getKeyList(key,0,-1);
    }

    /**
     * 获取集合的部分值
     * @param key
     * @param start 开始下标
     * @param end 结束下标
     * @return
     */
    public Object getKeyList(String key, long start, long end){
        return redisTemplate.opsForList().range(key,start,end);
    }

}
